import base64
import re
from io import BytesIO
import io,os
from urllib.request import urlopen

import opencc
import requests
from PIL import Image
import urllib
import base64


def remove_traditional_chinese(lst):
    # 创建一个OpenCC对象，设置转换模式为繁体到简体
    converter = opencc.OpenCC('t2s')

    new_lst = []
    for item in lst:
        simplified_text = converter.convert(item)
        new_lst.append(simplified_text)
    return list(set(new_lst))
# pattern = re.compile('[\u3007-\u301C\u3021-\u309E\u30A1-\u30FE\u3105-\u312C\u31A0-\u31BA\u3200-\u321E\u3220-\u3241\u3251-\u326E\u3270-\u3293\u3300-\u337F]')  # 繁体中文字符的Unicode范围
    # return [item for item in lst if not pattern.search(item)]

def img2base64(url):
    # 使用requests下载图片
    response = requests.get(url)
    # 确保请求成功
    if response.status_code == 200:
        # 将图片数据转换为BytesIO对象
        image_bytes = BytesIO(response.content)

        # 将图片转换为Base64编码的字符串
        base64_img = base64.b64encode(response.content).decode('utf-8')
        # base64_img = base64.b64encode(image_bytes.getvalue()).decode('utf-8')

        # 如果需要，可以将Base64字符串写入文件
        with open('image_base64.txt', 'w') as file:
            file.write(base64_img)
    else:
        base64_img = "e"

    return base64_img

def compress_and_convert_to_base64(image_url):
    try:
        # 从网络获取图片
        response = requests.get(image_url)
        response.raise_for_status()

        # 使用PIL库打开图片
        image = Image.open(io.BytesIO(response.content))

        # 设置压缩质量（这里设置为50，可以根据需要调整）
        quality = 10

        # 创建一个字节流对象
        output_buffer = io.BytesIO()

        # 将图片以指定质量保存到字节流中，格式为JPEG（可根据原图片格式调整）
        image.save(output_buffer, format='JPEG', quality=quality)

        # 获取压缩后的图片字节数据
        compressed_image_data = output_buffer.getvalue()

        # 将字节数据转换为Base64编码
        base64_encoded_image = base64.b64encode(compressed_image_data).decode('utf-8')

        return base64_encoded_image

    except requests.exceptions.RequestException as e:
        print(f"\n获取图片时出错: {e}")
    except IOError as e:
        print(f"\n处理图片时出错: {e}")


def save_base64_as_image(base64_data, output_path):
    try:
        # 对Base64数据进行解码
        image_data = base64.b64decode(base64_data)

        # 确保输出路径的目录存在，如果不存在则创建
        output_dir = os.path.dirname(output_path)
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)

        # 以二进制写入模式打开文件，并将解码后的图片数据写入
        with open(output_path, 'wb') as f:
            f.write(image_data)

        print(f"图片已成功保存至 {output_path}")
    except Exception as e:
        print(f"保存图片时出错: {e}")